<?php

 /**
  * ---------------------------------------------------------------
  * ALUMNO CONTROLADOR
  * ---------------------------------------------------------------
  * 
  * Esta es la clase Controlador alumno, contiene la invocación a todas las vistas 
  * para realizar las funciones ligadas a Alumno
  * 
  * @author Sergio Morlán Páramo
  */
 class Alumno extends CI_Controller {



     /**
      * ---------------------------------------------------------------
      * CONSTRUCTOR
      * ---------------------------------------------------------------
      * Este es el constructor, el cual incluye la libreria url que es indispensable 
      * en todos los objetos Alumno :]
      */
     public function __construct() {
         parent::__construct();
         $this->load->helper('url');
         $this->load->library('session');

     }




     /**
      * ---------------------------------------------------------------
      * PANTALLA
      * ---------------------------------------------------------------
      * Index pantalla de bienvenida o Log in ...
      * Para el index donde se podrá visualizar un menú en el cual el usuario encontrará 
      * funciones básicas relacionadas con el usuario :]
      * 
      * @link base_url()/index.php/alumno
      */
     public function index() {
         $this->load->library('utils/fecha');
         // Si es que el usuario ya ha iniciado sesión (MISESION)
         if ($this->estas_dentro()) {
             $data = array(
                       'titulo' => 'Sistema de Inscripción',
                       'fecha' => $this->fecha->getFecha(),
                       'menu' => 'menu_alumno',
                       'controlador_cliente' => 'alumno_registro.min',
                       'contenido' => 'alumno/alumno_bienvenida'
             );
         } else {
             // Muestra la Pantalla de Inicio (log in)
             $data = array(
                       'titulo' => 'Sistema de Inscripción',
                       'fecha' => $this->fecha->getFecha(),
                       'menu' => 'menu_centrodecomputo',
                       'controlador_cliente' => 'alumno_registro.min',
                       'contenido' => 'bienvenida'
             );
         }

         $this->load->view('plantilla/plantilla_unam', $data);

     }




     /**
      * ---------------------------------------------------------------
      * PANTALLA E INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Formulario de registro y validaciones ... 
      * Muestra el formularion necesario para realizar el registro de un alumno, tomando en 
      * cuenta que es el mismo (el alumno) el que está realizando dicho registro. :]
      * 
      * @param int $tipoalumno Tipo de alumno que se desea registrar
      * @link base_url()/index.php/alumno/registrarme
      */
     public function registrarme($tipoalumno=0) {
         $this->load->library('utils/fecha');
         $this->load->helper('form');
         $this->load->library('form_validation');
         $form_valido = FALSE;

         // Si es que se realiza un envío (presionar submit)
         if ($_POST) {
             $tipoalumno = $_POST["alumno_tipo"];
             $form_valido = $this->validaciones($tipoalumno);
         }

         // Si ocurrio algun error de validación regresamos al formulario
         if (!$form_valido) {
             // Se escoge el tipo de alumno para cargar los datos en el view
             $data = $this->escoger_alumno($tipoalumno);
             $this->load->view('plantilla/plantilla_unam', $data);
         } else {
             // Si todos los formatos son correctos intentamos registrar
             $this->intentar_registrarme();
         }

     }




     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Vamos a intentar registrar un alumno, tendremos que hacer ciertas validaciones en 
      * cuanto a formatos como detectar que el email sea el correcto 
      * Si todos los formatos son correctos se intentará registrar llamando al modelo_alumno 
      * el cual nos devolverá error si encuentra un registro duplicado en campos marcados 
      * como INDEX o UNIQUE :]
      * 
      * @access private
      */
     private function intentar_registrarme() {
         // Si no existe ningún envio por POST redireccionamos
         if (!$_POST)
             redirect(site_url("alumno/registrarme"));

         // Carga dek nideki
         $this->load->model('model_alumno');

         // Si no hay disponibilidad del correo Electrónico (es decir esta duplicado)
         if (!$this->model_alumno->disponibilidad_correoElectronico())
         //show_error($this->model_alumno->get_errormensaje());
             redirect(site_url("alumno/alumno_duplicado"));
         // Si no hay disponibilidad del numero de Identificación (es decir esta duplicado)
         if (!$this->model_alumno->disponibilidad_numeroIdentificacion())
             redirect(site_url("alumno/alumno_duplicado"));
         // Se intenta registrar
         if ($this->model_alumno->registrar()) {
             redirect(base_url());
         } else {
             // En caso de un error OJO muestra mensaje error de MySQL
             show_error($this->model_alumno->get_errormensaje(), 500, $this->model_alumno->get_errorcodigo());
         }

     }




     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Validación de formulario ...
      * Vamos a realizar las validaciones necesarias del lado del servidor, la información
      * sobre estes metodos se encuentra en la documentación de codeigniter
      * 
      * @access private
      * @return boolean 
      */
     private function validaciones($tipo_alumno) {

         // Validaciones de acuerdo al tipo de alumno
         switch ($tipo_alumno) {
             /* Alumno Interno Inscrito en la FESC */
             case 1:
                 $this->form_validation->set_rules('alumno_numeroIdentificacion', 'Número Matricula', 'trim|required|numeric|exact_length[9]|xss_clean');
                 break;
             /* Alumno Interno Profesor en la FESC */
             case 2:
                 $this->form_validation->set_rules('alumno_numeroIdentificacion', 'Clave de Profesor', 'trim|required|xss_clean');
                 break;
             /* Alumno Interno Trabajador en la FESC */
             case 3:
                 $this->form_validation->set_rules('alumno_numeroIdentificacion', 'Clave de Trabajador', 'trim|required|xss_clean');
                 break;
             /* Alumno de Comunidad UNAM */
             case 4:
                 $this->form_validation->set_rules('alumno_numeroIdentificacion', 'Número Matricula', 'trim|required|numeric|exact_length[9]|xss_clean');
                 break;
             /* Alumno (Ex-alumno) */
             case 5:
                 $this->form_validation->set_rules('alumno_numeroIdentificacion', 'Número Matricula', 'trim|required|numeric|exact_length[9]|xss_clean');
                 break;
             /* Alumno Externo */
             case 6:;
                 $this->form_validation->set_rules('alumno_numeroIdentificacion', 'RFC', 'trim|required|min_length[10]|xss_clean');
                 break;
         }

         // Validaciones generales
         $this->form_validation->set_rules('alumno_nombre', 'Nombre', 'required|trim|xss_clean');
         $this->form_validation->set_rules('alumno_apellidos', 'Apellidos', 'required|trim|xss_clean');
         $this->form_validation->set_rules('alumno_correoElectronico', 'Correo Electrónico', 'required|valid_email|trim|xss_clean');
         $this->form_validation->set_rules('alumno_correoElectronicor', 'Repetir Correo Electrónico', 'required|valid_email|matches[alumno_correoElectronico]|trim|xss_clean');
         $this->form_validation->set_rules('alumno_fecha_nacimiento', 'Fecha de Nacimiento', 'required|trim|xss_clean');
         $this->form_validation->set_rules('alumno_gradoAcademico', 'Grado Académico', 'required|trim|xss_clean');
         $this->form_validation->set_rules('alumno_telefono', 'Teléfono', 'required|numeric|trim|xss_clean');
         $this->form_validation->set_rules('alumno_password', 'Password', 'required|min_length[5]|trim|xss_clean');
         $this->form_validation->set_rules('alumno_ocupacion', 'Ocupación', 'required|trim|xss_clean');

         // Validación de tipo de alumno
         $this->form_validation->set_rules('alumno_tipo', 'Tipo de Alumno', 'required|trim|xss_clean');

         // Validación de campos que puede tener o no según el tipo de alumno
         $this->form_validation->set_rules('alumno_facultad', 'Facultad', 'required|trim|xss_clean');
         $this->form_validation->set_rules('alumno_carrera', 'Carrera', 'required|trim|xss_clean');
         $this->form_validation->set_rules('alumno_semestre', 'Semestre', 'required|numeric|trim|xss_clean');
         $this->form_validation->set_rules('alumno_jubilado', 'Jubilado', 'required|trim|xss_clean');

         // Formato de wrapper para los mensajes de error
         $this->form_validation->set_error_delimiters('<div class="error_form_validation">', '</div>');

         // Personalización de mensajes
         $this->form_validation->set_message('required', 'Debe introducir el campo %s');
         $this->form_validation->set_message('alpha', 'El campo %s no admite caracteres numericos');
         $this->form_validation->set_message('min_length', 'El campo %s debe ser de por lo menos %s caracteres');
         $this->form_validation->set_message('exact_length', 'El campo %s debe tener exactamente %s caracteres');
         $this->form_validation->set_message('valid_email', 'Debe escribir un formato de correo v&aacute;lido');
         $this->form_validation->set_message('numeric', 'Debe introducir solo numeros en el campo %s');
         $this->form_validation->set_message('integer', 'Debe introducir solo numeros en el campo %s');
         $this->form_validation->set_message('matches', 'Los emails no son iguales');

         // Retorno el resultado de la validación
         return $this->form_validation->run();

     }




     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS) JS (AJAX)
      * ---------------------------------------------------------------
      * Cargar alumno mediante ajax ... 
      * Este método nos ayudara a cargar un alumno mediante ajax y retornar el view
      * correspondiente, este tipo de carga necesita vorver a cargar el js de datepicker
      * por lo cual se carga hasta el final en un view
      * 
      * @param int $tipoalumno Tipo de alumno que se desea registrar
      * @link base_url()/index.php/alumno/registrarme
      */
     public function cargar_alumno() {
         if (!$_POST)
             return false;

         if ($_POST["alumno_tipo"] == 0)
             return false;

         // Librerias necesarias
         $this->load->helper('form');
         $this->load->library('form_validation');
         // Se escoge el tipo de alumno para cargar los datos en el view
         $data = $this->escoger_alumno($_POST["alumno_tipo"]);
         $this->load->view($data["contenido"], $data);
         // Necesita cargarse de nuevo el script de datepicker
         $this->load->view("alumno/registrarme/fecha_js");

     }




     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Seleccionar View según tipo de alumno ... 
      * Vamos a escoger un alumno por medio del parametro tipo alumno devolverá el arreglo
      * data ya con los datos necesarios para cargar el view según su tipo
      * 
      * @access private
      * @param Int $tipo_alumno Tipo de alumno 
      * @return Array
      */
     private function escoger_alumno($tipo_alumno) {
         $this->load->library('utils/fecha');

         switch ($tipo_alumno) {
             /* Alumno en General */
             case 0:
                 $titulo = 'Inscribir Alumno';
                 $contenido = 'alumno_general';
                 break;
             /* Alumno Interno Inscrito en la FESC */
             case 1:
                 $titulo = 'Inscribir Alumno FESC';
                 $contenido = 'alumno_fesc';
                 break;
             /* Alumno Interno Profesor en la FESC */
             case 2:
                 $titulo = 'Inscribir Alumno (Profesor FESC)';
                 $contenido = 'alumno_profesor';
                 break;
             /* Alumno Interno Trabajador en la FESC */
             case 3:
                 $titulo = 'Inscribir Alumno (Trabajador FESC)';
                 $contenido = 'alumno_trabajador';
                 break;
             /* Alumno de Comunidad UNAM */
             case 4:
                 $titulo = 'Inscribir Alumno (Comunidad UNAM)';
                 $contenido = 'alumno_comunidadunam';
                 break;
             /* Alumno (Ex-alumno) */
             case 5:
                 $titulo = 'Inscribir Ex-alumno';
                 $contenido = 'alumno_exalumno';
                 break;
             /* Alumno Externo */
             case 6:
                 $titulo = 'Inscribir Alumno Externo';
                 $contenido = 'alumno_externo';
                 break;
             /* Ninguno de los anteriores */
             default :
                 show_error("Tipo de Alumno No encontrado", 500, "Oops!");
                 break;
         }

         $data = array(
                   'titulo' => 'Inscribir Alumno',
                   'fecha' => $this->fecha->getFecha(),
                   'titulo_interno' => $titulo,
                   'menu' => 'menu_centrodecomputo',
                   'controlador_cliente' => 'alumno_registro.min',
                   'contenido' => 'alumno/registrarme/' . $contenido
         );

         return $data;

     }




     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Vamos a verificar que el usuario realmente haya iniciado sesión ;]
      * 
      * @access private
      * @return boolean 
      */
     private function estas_dentro() {
         if ($this->session->userdata('MISESION'))
             return TRUE;

     }




     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Vamos a intentar iniciar sesion siendo un alumno, primero validaremos que su 
      * "número" (clave) de usuario exista, si no exite lo notificará, y si el usuario 
      * existe viene la validación de su contraseña, si su contraseña fue incorrecta, la 
      * volverá a solicitar pero ya no solicitará el usuario. Si ambos campos son correctos 
      * permitirá al usuario iniciar su sesión :]
      * 
      * @link base_url()/index.php/alumno/intentar_iniciar_sesion 
      */
     public function intentar_iniciar_sesion() {
         if (!$_POST)
             redirect(base_url());
         $this->load->model('model_alumno');
         $this->load->library('msg');
         if ($this->model_alumno->validar_usuario()) {
             if ($this->model_alumno->validar_contraseña($this->session->userdata('NUMEROIDENTIFICACION'))) {
                 $this->session->set_userdata('MISESION', TRUE); // <=== Inicio de Sesión
                 redirect(base_url());
             } else {
                 redirect(base_url() . "index.php/alumno/iniciar_sesion");
             }
         } else {
             redirect(base_url() . "index.php/alumno/iniciar_sesion");
         }

     }




     /**
      * ---------------------------------------------------------------
      * PANTALLA
      * ---------------------------------------------------------------
      * Muestra el inicio de sesión generlal, (No es la pantalla de bienvenida)En caso de 
      * que intente "iniciar sesión" y su usuario sea correcto pero su contraseña no, 
      * decetará el nombre de usuario mostrandolo y sólo tendrá que colocar su contraseña  
      * 
      * @link base_url()/index.php/alumno/intentar_iniciar_sesion 
      */
     public function iniciar_sesion() {
         if ($this->estas_dentro()) {
             redirect(base_url());
         } else {
             $this->load->library('utils/fecha');
             if ($this->session->userdata('NOMBRE')) {
                 //$contenido = 'usuario_correcto';
                 $contenido = 'datos_incorrectos';
             } else {
                 if (!$this->session->userdata('INTENTOS')) {
                     $contenido = 'iniciar_sesion';
                 }
                 if ($this->session->userdata('INTENTOS') >= 1 && $this->session->userdata('INTENTOS') < 5) {
                     $contenido = 'datos_incorrectos';
                 }
             }

             if ($this->session->userdata('INTENTOS') >= 5) {
                 $this->load->model('model_alumno');
                 $this->model_alumno->limpiar_session();
                 $contenido = 'intentos';
             }


             $data = array(
                       'titulo' => 'Iniciar Sesión',
                       'fecha' => $this->fecha->getFecha(),
                       'menu' => 'menu_centrodecomputo',
                       'contenido' => 'alumno/inicar_sesion/' . $contenido
             );
             $this->load->view('plantilla/plantilla_unam', $data);
         }

     }




     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Vamos a intentar abandonar sesion siendo un alumno, 
      * 
      * @link base_url()/index.php/alumno/intentar_abandonar_sesion 
      */
     public function intentar_abandonar_sesion() {
         if ($this->estas_dentro()) {
             $this->load->model('model_alumno');
             $this->model_alumno->limpiar_session();
             redirect(base_url());
         } else {
             redirect(site_url("alumno/iniciar_sesion/iniciar_sesion"));
         }

     }




     /**
      * ---------------------------------------------------------------
      * PANTALLA
      * --------------------------------------------------------------
      * Muestra los detalles del perfil del alumno indicado en el
      * parametro, no muestra a otros alumnos un perfil que no sea el
      * suyo. Todos los perfiles son mostrados al usuario administrador
      * logeado como jefatura.
      * 
      * @param Int $id_alumno Matricula Interna del alumno
      */
     public function perfil($id_alumno=FALSE) {
         $this->load->library('utils/fecha');

         if ($this->session->userdata('J_SESION') || ($id_alumno == $this->session->userdata('ID_ALUMNO') && $this->estas_dentro())) {
             $this->load->model('model_alumno');
             $alumno = $this->model_alumno->obtener_alumno($id_alumno);
             $data = array(
                       'titulo' => $alumno->get_nombre() . $alumno->get_apellidos(),
                       'fecha' => $this->fecha->getFecha(),
                       'menu' => 'menu_alumno',
                       'contenido' => 'alumno/perfil/perfil_' . $alumno->get_tipo(),
                       'alumno' => $alumno
             );
             $this->load->view('plantilla/plantilla_unam', $data);
         } else {
             redirect(site_url("alumno/iniciar_sesion/iniciar_sesion"));
             //show_error("Lo Sentimos no puede tener acceso al perfil de otros alumnos");
         }

     }




     /*      * ********************************************************************************
      * 
      * 
      * 
      * 
      * 
      * 
      * 
      * 
      * 
      * 
      * 
      * 
      * 
      * 
      * ALFAS
      * 
      * 
      */



     /**
      * ---------------------------------------------------------------
      * PANTALLA
      * --------------------------------------------------------------
      * Muestra los cursos ofertados actualmente ç(grupos)y los cuales el alumno se puede 
      * inscribir(pre-inscripción)
      */
     public function cursos_ofertados() {
         $this->load->library('api/grupo_class');
         $this->load->library('utils/fecha');

         // Redirecciona en caso de no estar haber iniciado sesión
         if (!$this->estas_dentro())
             redirect(base_url());

         $cursos = $this->grupo_class->xgets();
         $view = "cursos_ofertados";

         if (!$cursos)
             $view = "cursos_nocursos";

         $data = array(
                   'titulo' => 'Cursos Ofertados',
                   'fecha' => $this->fecha->getFecha(),
                   'cursos' => $this->grupo_class->xgets(),
                   'menu' => 'menu_alumno',
                   'contenido' => 'alumno/cursos/' . $view,
         );

         $this->load->view('plantilla/plantilla_unam', $data);

     }




     /**
      * ---------------------------------------------------------------
      * PANTALLA
      * --------------------------------------------------------------
      * Muestra un curso en especifico (grupo), con todas sus características incluido el 
      * profesor que lo imparte, la descripción del curso y la ubicación de la sala.
      * @param int $id Id de curso
      */
     public function cursos($id) {

         $this->load->library('api/grupo_class');
         $this->load->library('utils/fecha');

         $curso = new $this->grupo_class($id);

         // Redirecciona en caso de no estar haber iniciado sesión
         if ($curso->get_id() == NULL)
             redirect(base_url());

         $data = array(
                   'titulo' => $curso->get_curso()->get_nombre(),
                   'fecha' => $this->fecha->getFecha(),
                   'curso' => $curso,
                   'menu' => 'menu_alumno',
                   'contenido' => 'alumno/cursos/cursos_curso',
         );
         $this->load->view('plantilla/plantilla_unam', $data);

     }




     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Vamos a intentar inscribir, a un grupo
      * 
      * @link base_url()/index.php/alumno/inscribir
      */
     public function inscribir() {

         // Redirecciona en caso de no estar haber iniciado sesión
         if (!$this->estas_dentro())
             redirect(base_url());

         // Redirecciona si no se ha seleccionado ningún curso
         if (!$_POST["curso"] || !$_POST["id"])
             redirect(site_url("alumno/cursos_ofertados"));

         $this->load->model('model_alumno');
         if ($this->model_alumno->inscribir($_POST["curso"], $_POST["id"]))
             redirect(site_url("alumno/cursos_ofertados"));
         else
             redirect(site_url("alumno/cursos_ofertados"));

     }




     /**
      * ---------------------------------------------------------------
      * PANTALLA
      * --------------------------------------------------------------
      * Muestra el historial del alumno, tanto de cursos concluidos, cursos actualmente
      * inscrito y cursos a los que está preinscrito.
      */
     public function historial() {
         // Redirecciona en caso de no estar haber iniciado sesión
         if (!$this->estas_dentro())
             redirect(base_url());

         $this->load->model('model_alumno');
         $this->load->library('utils/fecha');
         $cursos = $this->model_alumno->obtener_historial($this->session->userdata('ID_ALUMNO'));
         
         if ($cursos) {
             $data = array(
                       'titulo' => 'Mi Historial',
                       'fecha' => $this->fecha->getFecha(),
                       'cursos' => $cursos,
                       'menu' => 'menu_alumno',
                       'contenido' => 'alumno/historial/historial_ver',
             );
             $this->load->view('plantilla/plantilla_unam', $data);
         }
         else
             echo "historial invalidao";

     }




     public function alumno_duplicado() {
         $this->load->library('utils/fecha');
         $data = array(
                   'titulo' => 'Recuperar Cuenta',
                   'fecha' => $this->fecha->getFecha(),
                   'menu' => 'menu_centrodecomputo',
                   'controlador_cliente' => 'alumno_registro.min',
                   'contenido' => 'alumno/registrarme/alumno_error_duplicado'
         );
         $this->load->view('plantilla/plantilla_unam', $data);

     }




     public function disponibilidad_email() {
         if (!$_POST)
             return false;
         $this->load->model('model_alumno');
         if ($this->model_alumno->obtener_alumno($_POST["email"]))
             echo json_encode(array("msg" => "Email Duplicado"));

     }




     public function editar_informacion() {
         
     }




     public function pruebas() {
         /* $this->load->library("api/alumno_class");
           $all =$this->alumno_class->xget_many();
           $matriculas = $this->alumno_class->get_matricula();
           $nombres = $this->alumno_class->get_nombre();
           for($i=0;$i<count($matriculas);$i++){
           echo $matriculas[$i]."<br/>";
           echo $nombres[$i]."<br/>";
           } */
         /*
           $array = array(
           'nombre' => 'Sergio',
           'apellidos' => 'Morlan Paramo',
           'id' => '212'
           );


           $tmp = serialize($array);
           $tmp = urlencode($tmp);
           //echo $tmp;


           $tmp = stripslashes($tmp);

           $tmp = urldecode($tmp);

           $tmp = unserialize($tmp);
           echo $tmp; */
         /*
           $this->load->library("api/alumno_class");
           $alumno = new $this->alumno_class('1');
           echo $alumno->get_numeroIdentificacion(); */

         //$this->ci =& get_instance();
         /* $this->load->database();
           echo $this->db->database,$this->db->hostname,  $this->db->password,  $this->db->username; */

         //$this->ci =& get_instance();
         //echo $this->ci->db->database;
         //$this->load->library("api/engine/connect");
         /*
           $captcha = imagecreatefromgif(base_url() . 'imgs/encabezado-unam.gif');
           $colText = imagecolorallocate($captcha, 0, 0, 0);
           imagestring($captcha, 5, 100, 7, "hola", $colText);
           imagegif($captcha);
          */
         /* $this->load->helper('captcha');
           $vals = array(
           'word' => 'Random word',
           'img_path' => './captcha/',
           'img_url' => base_url() . 'imgs/'
           );

           $cap = create_captcha($vals);
           echo $cap['image']; */
         
     }




     public function img() {
         echo '<img src=' . site_url("alumno/pruebas") . '/>';

     }




 }

 